﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using extremeEvents.Data;
using System.Data.Objects;

namespace extremeEvents.Eventos
{
    public partial class ListaEventos : UserControl
    {
        public ListaEventos()
        {
            InitializeComponent();
        }


        /// <summary>
        /// Função chamada após formulário ser carregado
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void eventosdataGridView_Paint(object sender, PaintEventArgs e)
        {
            try
            {
                //desactivar a geração das colunas de forma automática
                eventosdataGridView.AutoGenerateColumns = false;

                //obter lista de eventos
                List<listarEventos_Result> eventos =  DLGenerica.Instance.listarEventos();
                List<eventosLinha> rows = new List<eventosLinha>();

                //percorrer todos os utilizadores
                //para definir as linhas da tabela
                for (int i = 0; i < eventos.Count; i++)
                    rows.Add(new eventosLinha
                    {
                        id_evento = eventos[i].id_evento,
                        numero_linha = i + 1,
                        cancelado = eventos[i].cancelado,
                        data = eventos[i].Data.ToShortDateString(),
                        evento = eventos[i].Evento,
                        Utilizador = eventos[i].UserName,
                        editar = "editar"
                    }
                   );
                //definir tabela
               eventosdataGridView.DataSource = rows;
                

            }
            catch (Exception exp)
            {
                Console.WriteLine(exp.Message);
            }
        }

        private void eventosdataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            //verifica se nao foi clicado no header
            if (e.RowIndex != -1)
            {
                //obter o nome da coluna seleccionada
                var nome_columna = eventosdataGridView.Columns[e.ColumnIndex].Name;
                
                //verifica se foi seleccionado a columna "editar"
                if (nome_columna == "editar")
                {
                    //guardar o id do envento
                    int id = (int)eventosdataGridView.Rows[e.RowIndex].Cells["id_evento"].Value;
                    Navegador.Instance.id_evento = id;

                    //ir para o menu de edição de um evento
                    Navegador.Instance.irPara("editarEventoPage");
                    //obter label "titulo"
                    var label = (Label)Navegador.Instance.main.Controls.Find("titleLabel", true)[0];
                    //mostrar o nome do evento a ser editado
                    label.Text = label.Text + " | " + eventosdataGridView.Rows[e.RowIndex].Cells["evento"].Value + " (" + eventosdataGridView.Rows[e.RowIndex].Cells["Utilizador"].Value + ")";

                }
                //verifica se foi seleccionado a columna "cancelado"
                else if (nome_columna == "cancelado")
                    {
                        //obter o estado do utilizador
                        bool cancelado = (bool)eventosdataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;

                        if (MessageBox.Show("Deseja " + (cancelado ? "activar" : "desactivar") + " o evento \"" + eventosdataGridView.Rows[e.RowIndex].Cells["evento"].Value + "\"?", "Alterar estado do evento", MessageBoxButtons.YesNo) == DialogResult.Yes)
                        {
                            //alterar o estado na tabela
                            eventosdataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = !cancelado;

                            Console.WriteLine(eventosdataGridView.Rows[e.RowIndex].Cells["id_evento"].Value);
                            Console.WriteLine(cancelado);

                            //alterar o estado na base de dados
                            DLGenerica.Instance.alterarEstadoEvento((int)eventosdataGridView.Rows[e.RowIndex].Cells["id_evento"].Value, !cancelado);

                        }
                    }
            }

        }

        /// <summary>
        /// Objecto utilizado para alimenter a tabela de eventos
        /// </summary>
        class eventosLinha
        {
            public int id_evento { get; set; }
            public bool cancelado { get; set; }
            public string Utilizador { get; set; }
            public int numero_linha { get; set; }
            public string data { get; set; }
            public string evento { get; set; }
            public string editar { get; set; }
        }

        
    }
}
